<?php

namespace Common\Model;

use Think\Model;

/**
 * 社区模型
 */
class BbsModel extends Model {

    const NORMAL = 0;   // 社区状态：正常
    const DELTEL = -1;  // 社区状态：删除

    const BBS_KEY = 'bbs:';     // 社区详细信息的缓存键名

    /**
     * 新增一条数据
     * @param $data
     * @return mixed
     */
    public static function addData($data){
        return M('Bbs')->add($data);
    }

    /**
     * 社区管理员更新社区信息
     * @param $bid
     * @param $data
     * @return bool
     */
    public static function update($bid, $data){
        if($result = M('Bbs')->where(['id' => $bid])->save($data)){
            self::clearCache($bid);
        }
        return $result;
    }

    /**
     * 获取指定社区的信息
     * @param $bid
     * @param bool $all
     * @return array|mixed
     */
    public static function getBbsById($bid, $all = true){
        if (!$bid) return null;
        $key = self::BBS_KEY.$bid;
        $result = S($key);
        if (!$result && $result = M('Bbs')->find($bid)) {
            S($key, $result);
        }
        if ($result && $all && $addData = BbsCountModel::get($bid)) {
            foreach ($addData as $k => $v) {
                $result[$k] += $v;
            }
        }
        return $result;
    }

    /**
     * 修改社区的贡献值
     * @param $bid
     * @param $gx
     * @param bool $add 为true时表示增加，为false时表示减少
     * @return bool
     */
    public static function updateGx($bid, $gx = 1, $add = true){
        if($add){
            $result = M('Bbs')->where(['id' => $bid])->setInc('gx', $gx);
        }else{
            $result = M('Bbs')->where(['id' => $bid])->setDec('gx', $gx);
        }
        if($result){
            self::clearCache($bid);
        }
        return $result;
    }

    /**
     * 用户创建社区
     * @param $uid
     * @param $gx
     * @param $data
     * @return bool|mixed 如果创建成功返回社区ID
     */
    public static function createBbs($uid, $gx, $data){
        $model = M();
        $model->startTrans();
        // 先减少用户的贡献度
        if(!UserModel::updateGx($uid, $gx, false)){
            $model->rollback();
            return false;
        }
        // 然后添加社区信息
        $bid = self::addData($data);
        if(!$bid){
            $model->rollback();
            return false;
        }
        // 最后添加关系数据
        if(!UserOrgModel::addData($uid, $bid)){
            $model->rollback();
            return false;
        }
        if (!LogModel::userCreateBbs($uid, $gx, $bid)) {
            $model->rollback();
            return false;
        }
        $model->commit();
        return $bid;
    }

    /**
     * 获取社区对应的名称
     * @param $bid
     * @return mixed
     */
    public static function getBbsName($bid)
    {
        if ($bbs = self::getBbsById($bid, false)) {
            return $bbs['name'];
        }
        return '';
    }

    public static function clearCache($bid){
        $key = self::BBS_KEY.$bid;
        S($key, null);
    }

}